package com.tinyengine.it.model.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.tinyengine.it.common.handler.MapTypeHandler;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 页面表
 * @TableName t_page
 */
@Data
@TableName(value = "t_page")
public class TPage {
    /**
     * 主键id
     */
    @TableId(type = IdType.AUTO)
    @NotNull(message = "id不能为空")
    private Integer id;

    @Schema(name = "menuName", description = "菜单名称")
    private String menuName;

    @Schema(name = "code", description = "组件名称")
    private String code;
    /**
     * 名称
     */
    private String name;

    /**
     * 描述
     */
    @TableField("`desc`")
    private String desc;

    /**
     * 关联appid
     */
    private Integer appId;

    /**
     * 访问路径
     */
    private String route;

    /**
     *
     */
    private String sfcContent;

    /**
     * 页面内容
     */
    @TableField(typeHandler = MapTypeHandler.class)
    private Map<String, Object> pageContent;

    /**
     * 根元素是否是body
     */
    private Integer isBody;

    /**
     * 父文件夹id
     */
    private Integer parentId;

    /**
     * 分组
     */
    @TableField("`group`")
    private String group;

    /**
     * 页面/文件夹深度，更改层级时服务端校验用（校验可有可无）
     */
    private Integer depth;

    /**
     * 是否为页面：分为页面和文件夹
     */
    private Integer isPage;

    /**
     * 当前检出者id
     */
    private String occupierBy;

    /**
     * 是否是默认页面
     */
    private Integer isDefault;

    /**
     * 设计预留字段
     */
    private String contentBlocks;

    /**
     * 当前历史记录表最新版本
     */
    private String latestVersion;

    /**
     * 当前历史记录表id
     */
    private Integer latestHistoryId;

    /**
     * 租户id
     */
    private String tenantId;

    /**
     * 业务租户id
     */
    private String renterId;

    /**
     * 站点id，设计预留字段
     */
    private String siteId;

    /**
     * 创建人
     */
    private String createdBy;

    /**
     * 创建时间
     */
    private Date createdTime;

    /**
     * 最后修改人
     */
    private String lastUpdatedBy;

    /**
     * 更新时间
     */
    private Date lastUpdatedTime;

    @TableField(exist = false)
    private List<TPage> Children;

}